package com.xujie.sportsmeeting.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xujie.sportsmeeting.dto.EventCheckinDTO;
import com.xujie.sportsmeeting.entity.EventCheckin;
import com.xujie.sportsmeeting.vo.EventCheckinVO;

import java.util.List;
import java.util.Map;

/**
 * 赛事检录服务接口
 */
public interface EventCheckinService extends IService<EventCheckin> {

    /**
     * 分页查询检录信息
     */
    IPage<EventCheckinVO> getCheckinPage(Page<EventCheckinVO> page, 
                                       Long eventId, 
                                       String athleteName, 
                                       String studentNumber, 
                                       String department, 
                                       Integer checkinStatus);

    /**
     * 根据比赛项目ID查询检录信息
     */
    List<EventCheckinVO> getCheckinByEventId(Long eventId);

    /**
     * 创建检录记录（基于已通过审核的报名记录）
     */
    boolean createCheckinRecords(Long eventId);

    /**
     * 运动员检录
     */
    boolean checkinAthlete(EventCheckinDTO dto, String operator);

    /**
     * 批量检录
     */
    boolean batchCheckin(List<Long> checkinIds, String operator);

    /**
     * 标记缺席
     */
    boolean markAbsent(Long checkinId, String operator, String notes);

    /**
     * 取消检录
     */
    boolean cancelCheckin(Long checkinId, String operator);

    /**
     * 获取检录统计信息
     */
    Map<String, Object> getCheckinStatistics(Long eventId);

    /**
     * 查询未检录的运动员列表
     */
    List<EventCheckinVO> getUncheckedAthletes(Long eventId);

    /**
     * 验证运动员是否已检录（用于成绩录入验证）
     */
    boolean isAthleteCheckedIn(Long athleteId, Long eventId);

    /**
     * 根据运动员ID和比赛ID查询检录记录
     */
    EventCheckinVO getCheckinByAthleteAndEvent(Long athleteId, Long eventId);

    /**
     * 删除检录记录
     */
    boolean deleteCheckinRecord(Long checkinId);
}
